package model

import (
	"time"
)

// File 文件模型
type File struct {
	BaseModel
	Name        string    `json:"name" gorm:"size:255;not null;comment:文件名"`
	Path        string    `json:"path" gorm:"size:255;not null;comment:文件路径"`
	URL         string    `json:"url" gorm:"size:255;not null;comment:访问URL"`
	Size        int64     `json:"size" gorm:"not null;comment:文件大小"`
	ContentType string    `json:"content_type" gorm:"size:100;not null;comment:内容类型"`
	UploadTime  time.Time `json:"upload_time" gorm:"not null;comment:上传时间"`
	UserID      uint      `json:"user_id" gorm:"not null;comment:上传用户ID"`
	TenantID    uint      `json:"tenant_id" gorm:"not null;comment:租户ID"`
	Storage     string    `json:"storage" gorm:"size:20;not null;comment:存储类型"`
	IsPublic    bool      `json:"is_public" gorm:"not null;default:false;comment:是否公开访问"`
	Category    string    `json:"category" gorm:"size:50;comment:文件分类"`
	Tags        string    `json:"tags" gorm:"size:255;comment:标签"`
	Remark      string    `json:"remark" gorm:"size:255;comment:备注"`
}

// TableName 表名
func (File) TableName() string {
	return "sys_file"
}

// FileService 文件服务接口
type FileService interface {
	// 上传文件
	Upload(file *File, data []byte) error

	// 获取文件信息
	GetByID(id uint) (*File, error)

	// 获取文件列表
	List(page, pageSize int, query map[string]interface{}) ([]*File, int64, error)

	// 删除文件
	Delete(id uint) error

	// 批量删除文件
	BatchDelete(ids []uint) error

	// 获取文件访问URL
	GetURL(id uint, expiration time.Duration) (string, error)

	// 获取文件内容
	GetContent(id uint) ([]byte, error)
}
